//
//  Person.h
//  08-iOS9新特性(Nullability, 范型，_kindof)
//
//  Created by dllo on 16/7/13.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface Person : NSObject

//Nullability  (只能对象类型上)是在编译层次上加了一些改动
// nonnull 声明的属性 ， 不能为空， （getter和setter方法）
//@property (nonnull, nonatomic, copy) NSString *name;
//__nonnull 在声明属性的类型后加__nonnull
@property (nonatomic, copy) NSString * __nonnull name;
// nullable 声明的属性， 是可以为空 （getter和setter方法）
//@property (nullable, nonatomic, copy) NSString *sex;
//__nonnull 在声明属性的类型后加__nullable
@property (nonatomic, copy) NSString *__nullable sex;

// 不可以向下面这样做
//@property (nonnull, nonatomic, assign) NSInteger number;
// setter方法可以为空（nullable） getter方法不能为空（nonnull）
// 举例， UIViewController中的view属性
@property (null_resettable, nonatomic, strong) NSArray *friends;

@property (nonatomic, strong) NSDictionary *dic;
//NS_ASSUME_NONNULL_BEGIN
//NS_ASSUME_NONNULL_END
//一般应用于头文件.h 一般将声明包含起来
//针对所有属性， 添加 nonnull 修饰
// 也就是说， 除了nullable和null_resttable 需要加修饰， 其他不需要

@end
NS_ASSUME_NONNULL_END